package com.agencia.logica;


import java.sql.SQLException;
import java.util.Date;

import javax.xml.ws.WebServiceRef;

import com.agencia.connection.DataSocketAnular;
import com.agencia.connection.DataSocketBuscar;
import com.agencia.dominio.Anulado;
import com.agencia.dominio.Venta;
import com.agencia.persistencia.PersistenciaImp;
import com.imm.logica.DataAnulado;
import com.imm.logica.DataVenta;
import com.imm.logica.IAdminIMMFacade;
import com.imm.logica.IAdminIMMFacadeService;


public class AdminVentaImp implements IAdminVenta {

	@WebServiceRef(IAdminIMMFacadeService.class)
	private IAdminIMMFacade immFacade;
	
	private AdminVentaImp() {
		
	}

	
	private static AdminVentaImp instancia = new AdminVentaImp();  
	 
	public static AdminVentaImp getInstance() {  
		
		  return instancia;  
		 }  



	public Boolean ingresarVenta(Venta venta) throws SQLException {		
		DataVenta retorno = immFacade.ingresarVenta(Venta2DataVenta(venta));		
		venta.setId_imm(retorno.getId());
		System.out.println(retorno.getId());
		return true;
	
	/*	try {
			return true;
			return IAdminAgenciaCobranza.getIPersistencia().AltaVentaBD(venta);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
		return false;*/
		
		//}
		//else return false;
	  
		
}

	public DataSocketAnular anularVenta(DataSocketAnular dataVenta) throws SQLException {
		
		Venta venta = new Venta();
		Anulado anulado = new Anulado();
		Integer id_Agencia = null;
		
		venta = PersistenciaImp.getInstance().buscarVenta(dataVenta.getIdImm());
		id_Agencia = PersistenciaImp.getInstance().obtenerAgencia();

		if(verificarVentaAnulada(venta)){
			/*SE DEBE INVOCAR EL METODO DE ANULAR VENTA COTNRA LA IMM*/
	//			DataAnulado retorno = immFacade.anularVenta(venta.getId_imm(), id_Agencia);
	//			anulado.setId(retorno.getId());
			DataAnulado retorno = new DataAnulado(); 
			retorno.setError(0);
			retorno.setId(dataVenta.getIdImm());
			retorno.setIdAgencia(id_Agencia);
/////////////////////////////////////////////////////////////////////////////////
			
			
			anulado.setFecha(new Date());
			anulado.setId(retorno.getId());
			anulado.setId_venta(venta.getId());
			
			anulado = PersistenciaImp.getInstance().anularVentaBD(venta, anulado);
			dataVenta.setIdAnulado(anulado.getId());
		}
		
		return dataVenta;
	}


	public Boolean verificarDatosVentas(Venta venta) throws SQLException {
		return PersistenciaImp.getInstance().verificarDatosVentas(venta);
	}

	
	public Boolean verificarVentaAnulada(Venta venta) throws SQLException {
		if(PersistenciaImp.getInstance().verificarDatosVentas(venta)){
			if(PersistenciaImp.getInstance().verificarVentaAnulada(venta)){
				return false;
			}
			return true;
		}else{
			return false;
		}
	}
		
	
	private DataVenta Venta2DataVenta (Venta v){
		DataVenta a = new DataVenta();
			a.setFechaInicio(v.getFechaInicio().getTime());
		    a.setFechaVenta(v.getFechaVenta().getTime());	
	    	a.setError(0);//va sin errores	
			a.setId(0);//va sin id de ticket
			a.setIdAgencia(1);
			a.setImporte(v.getImporte());
			a.setMatricula(v.getMatricula());
			a.setMinutos(v.getMinutos());
		
		return a;
	}
	
	public DataSocketBuscar buscarDataVenta(DataSocketBuscar buscarVenta) throws SQLException {
		
		return PersistenciaImp.getInstance().buscarDataVenta(buscarVenta.getIdImm());
	}

	public Venta buscarVenta(Integer Id_Ticket_IMM) throws SQLException {
		// TODO Auto-generated method stub
		return PersistenciaImp.getInstance().buscarVenta(Id_Ticket_IMM);
	}

}
